﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using DAL.Entity;
using DAL.Persistencia;

namespace NewTierra.Pages.Cliente
{
    public partial class ClienteConsulta : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                PopularDrops();
            }
            
        }

        #region Popular Drops

        protected void PopularDrops()
        {
            PopularddlRepresentante();
            PopularddlCentroCusto();
            PopularddlMercado();
            PopularddlBaseTarifaria();
            PopularddlPais();
            PopularddlCidade();
        }

        protected void PopularddlRepresentante()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    ddlRepresentante.DataSource = Con.Clientes.OrderBy(c => c.Cliente_nome).ToList();
                    ddlRepresentante.DataValueField = "Cliente_id";
                    ddlRepresentante.DataTextField = "Cliente_nome";
                    ddlRepresentante.DataBind();

                    ddlRepresentante.Items.Insert(0, new ListItem("Nenhum", "0"));
                }
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void PopularddlCentroCusto()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    ddlCentroCusto.DataSource = Con.Centro_Custo.OrderBy(c => c.CentroCusto_nome).ToList();
                    ddlCentroCusto.DataValueField = "CentroCusto_id";
                    ddlCentroCusto.DataTextField = "CentroCusto_nome";
                    ddlCentroCusto.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void PopularddlMercado()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    ddlMercado.DataSource = Con.Mercadoes.OrderBy(m => m.Mercado_nome).ToList();
                    ddlMercado.DataValueField = "Mercado_id";
                    ddlMercado.DataTextField = "Mercado_nome";
                    ddlMercado.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void PopularddlBaseTarifaria()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    ddlBaseTarifaria.DataSource = Con.BaseTarifarias.OrderBy(b => b.BaseTarifaria_nome).ToList();
                    ddlBaseTarifaria.DataValueField = "BaseTarifaria_id";
                    ddlBaseTarifaria.DataTextField = "BaseTarifaria_nome";
                    ddlBaseTarifaria.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void PopularddlPais()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    ddlPais.DataSource = Con.Pais.OrderBy(p => p.PAIS_nome).ToList();
                    ddlPais.DataValueField = "PAIS_id";
                    ddlPais.DataTextField = "PAIS_nome";
                    ddlPais.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void PopularddlCidade()
        {
            try
            {
                using (NewTierraEntities Con = new NewTierraEntities())
                {
                    int IdPais = Convert.ToInt32(ddlPais.SelectedValue);
                    ddlCidade.DataSource = Con.Cidades.Where(c => c.PAIS_id == IdPais).OrderBy(c => c.CID_nome).ToList();
                    ddlCidade.DataValueField = "CID_id";
                    ddlCidade.DataTextField = "CID_nome";
                    ddlCidade.DataBind();
                }
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void ddlPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            PopularddlCidade();
        }

        #endregion

        #region Contatos Cliente

        private void PopularGridContatosCliente(int IdCliente)
        {
            try
            {
                ContatoClienteDAL c = new ContatoClienteDAL();

                GridContatosCliente.DataSource = c.ListarTodos(IdCliente);
                GridContatosCliente.DataBind();

            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        #endregion

        #region CRUD Cliente

        protected void CadastrarCliente(object sender, EventArgs e)
        {
            ClienteDAL s = new ClienteDAL();

            if (txtCodCliente.Text != "")
            {
                LimpaCampos(this.Controls);
                lblMsgCadCliente.Text = "";
                txtNomeCliente.Focus();
                PanelContatos.Visible = false;
                btnNovoCliente.Text = "Salvar";
                return;
            }

            if (s.ObterPorNome(txtNomeCliente.Text) != null)
            {
                lblMsgCadCliente.Text = "Já existe cliente cadastrado com esse nome, tente outro.";
                return;
            }

            try
            {
                DAL.Entity.Cliente c = new DAL.Entity.Cliente();

                c.Cliente_nome = txtNomeCliente.Text;
                c.Cliente_endereco = txtEnderecoCliente.Text;
                c.Cliente_http = txtHttp.Text;
                c.Cliente_email = txtEmailCliente.Text;
                c.Cliente_cep = txtCepCliente.Text;
                c.Cliente_telefone = txtTelefoneCliente.Text;
                c.Cliente_fax = txtFaxCliente.Text;
                c.Cliente_since = Convert.ToDateTime(txtSinceDataCliente.Text);
                c.Mercado_id = Convert.ToInt32(ddlMercado.SelectedValue);
                c.BaseTarifaria_id = Convert.ToInt32(ddlBaseTarifaria.SelectedValue);
                c.CentroCusto_id = Convert.ToInt32(ddlCentroCusto.SelectedValue);
                c.PAIS_id = Convert.ToInt32(ddlPais.SelectedValue);
                c.CID_id = Convert.ToInt32(ddlCidade.SelectedValue);

                if (ddlRepresentante.SelectedValue.Equals("0"))
                {
                    c.Representante_id = null;
                }
                else
                {
                    c.Representante_id = Convert.ToInt32(ddlRepresentante.SelectedValue);
                }

                s.Salvar(c);
                LimpaCampos(this.Controls);
                lblMsgCadCliente.Text = "Cadastro efetuado com sucesso.";


            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void AtualizarCliente(object sender, EventArgs e)
        {
            if (txtCodCliente.Text == "")
            {
                lblMsgCadCliente.Text = "Selecione um cliente para ser atualizado.";
                return;
            }
            try
            {
                DAL.Entity.Cliente c = new DAL.Entity.Cliente();

                c.Cliente_id = Convert.ToInt32(txtCodCliente.Text);
                c.Cliente_nome = txtNomeCliente.Text;
                c.Cliente_endereco = txtEnderecoCliente.Text;
                c.Cliente_http = txtHttp.Text;
                c.Cliente_email = txtEmailCliente.Text;
                c.Cliente_cep = txtCepCliente.Text;
                c.Cliente_telefone = txtTelefoneCliente.Text;
                c.Cliente_fax = txtFaxCliente.Text;
                c.Cliente_since = Convert.ToDateTime(txtSinceDataCliente.Text);
                c.Mercado_id = Convert.ToInt32(ddlMercado.SelectedValue);
                c.BaseTarifaria_id = Convert.ToInt32(ddlBaseTarifaria.SelectedValue);
                c.CentroCusto_id = Convert.ToInt32(ddlCentroCusto.SelectedValue);
                c.PAIS_id = Convert.ToInt32(ddlPais.SelectedValue);
                c.CID_id = Convert.ToInt32(ddlCidade.SelectedValue);

                if (ddlRepresentante.SelectedValue.Equals("0"))
                {
                    c.Representante_id = null;
                }
                else
                {
                    c.Representante_id = Convert.ToInt32(ddlRepresentante.SelectedValue);
                }

                ClienteDAL s = new ClienteDAL();
                s.Atualizar(c);
                lblMsgCadCliente.Text = "Registro atualizado com sucesso.";

            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void ExcluirCliente(object sender, EventArgs e)
        {
            ClienteDAL d = new ClienteDAL();

            if (txtCodCliente.Text == "")
            {
                lblMsgCadCliente.Text = "Selecione um cliente para ser excluído.";
                return;
            }

            if (d.VerificaRepresentante(Convert.ToInt32(Session["IdCliente"])))
            {
                lblMsgCadCliente.Text = "Esse cliente é reprensentante de um ou mais clientes, não podendo ser excluído.";
                return;
            }

            try
            {

                DAL.Entity.Cliente c = d.ObterPorId(Convert.ToInt32(txtCodCliente.Text));
                d.Excluir(c);

                Session.Abandon();
                PanelContatos.Visible = false;
                lblMsgCadCliente.Text = "Registro excluído com sucesso.";
                LimpaCampos(this.Controls);

            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void LimparCliente(object sender, EventArgs e)
        {
            Session.Abandon();
            Response.Redirect("ClienteConsulta.aspx");
        }

        #endregion

        #region Regras
        
        [WebMethod]
        public static List<string> SearchCliente(string prefixText)
        {
            using (NewTierraEntities Con = new NewTierraEntities())
            {
               
                List<DAL.Entity.Cliente> c = new List<DAL.Entity.Cliente>();

                c = Con.Clientes.Where(p => p.Cliente_nome.Contains(prefixText)).ToList();

                List<string> lista = new List<string>();

                foreach (DAL.Entity.Cliente p in c)
                {
                    lista.Add(p.Cliente_nome);
                }

                return lista;
            }
        }

        protected void CarregarClienteNome(object sender, EventArgs e)
        {
            try
            {

                ClienteDAL s = new ClienteDAL();
                DAL.Entity.Cliente ss = s.ObterPorNome(txtClientes.Text);
                txtClientes.Text = "";
                lblMsgCadCliente.Text = "";
                PanelContatos.Visible = true;
                
                Session["nomeCliente"] = ss.Cliente_nome;
                Session["IdCliente"] = ss.Cliente_id;
                lblClienteNomeTituloTXT.Text = ss.Cliente_nome;
                txtCodCliente.Text = ss.Cliente_id.ToString();
                txtNomeCliente.Text = ss.Cliente_nome;
                txtEnderecoCliente.Text = ss.Cliente_endereco;
                txtCepCliente.Text = ss.Cliente_cep;
                txtTelefoneCliente.Text = ss.Cliente_telefone;
                txtFaxCliente.Text = ss.Cliente_fax;
                txtSinceDataCliente.Text = string.Format("{0:dd/MM/yyyy}", ss.Cliente_since);

                btnNovoCliente.Text = "Novo";

                if (ss.Representante_id != null)
                {
                    ddlRepresentante.SelectedValue = ss.Representante_id.ToString();
                }
                else
                {
                    ddlRepresentante.SelectedValue = "0";
                }


                ddlMercado.SelectedValue = ss.Mercado_id.ToString();
                ddlBaseTarifaria.SelectedValue = ss.BaseTarifaria_id.ToString();
                ddlCentroCusto.SelectedValue = ss.CentroCusto_id.ToString();

                ddlPais.SelectedValue = ss.PAIS_id.ToString();
                PopularddlCidade();
                ddlCidade.SelectedValue = ss.CID_id.ToString();

                PopularGridContatosCliente(ss.Cliente_id);
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void LimpaCampos(ControlCollection controls)
        {
            foreach (Control ctrl in controls)
            {
                if (ctrl is TextBox)
                {
                    (ctrl as TextBox).Text = string.Empty;
                }
                // ... demais controles que queira limpar

                LimpaCampos(ctrl.Controls);
            }
        }

        protected void EditarContato(object sender, CommandEventArgs e)
        {
            int myId = Convert.ToInt32(e.CommandArgument);

            string script = "";
            script = script + "window.open('AddContato_Cliente.aspx?Tipo=edit','', " + "'status=1, scrollbars=yes, width=940, height=430, top=0, left=0');";
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Contato", script, true);
        }

        protected void ExcluirContato(object sender, CommandEventArgs e)
        {
            try
            {
                ContatoClienteDAL c = new ContatoClienteDAL();

                int myId = Convert.ToInt32(e.CommandArgument);

                Cli_Contato cc = c.ObterPorId(myId);
                c.Excluir(cc);
                lblMsgCadCliente.Text = "Registro excluído com sucesso.";

                PopularGridContatosCliente(Convert.ToInt32(Session["IdCliente"]));
            }
            catch (Exception ex)
            {
                lblMsgCadCliente.Text = ex.Message;
            }
        }

        protected void AtualizaGridsContatos(object sender, ImageClickEventArgs e)
        {
            PopularGridContatosCliente(Convert.ToInt32(Session["IdCliente"]));
        }

        #endregion

    }
}